# -*- coding: utf-8 -*-
from django import forms
from django.utils.translation import ugettext_lazy as _
from apps.amway.models import Factura, Inventario, HistorialInventario, Producto, PreciosProducto, TipoTransaccion
from datetime import date
import os
################################################################################
date_dict = { 'id' : 'datepicker', 'autocomplete' : 'off'  }
prod_dict = {'id' : 'productos', 'size' : '35' }

#################################################################################
#class AddFacturaForm(forms.Form):
#    factura = forms.CharField()
#    fecha = forms.DateField(widget=forms.TextInput(attrs=date_dict))   
#    
#
#    def save(self, usuario):
#        codigo = self.cleaned_data['factura']
#        if re.search('0000', codigo):
#            cod = codigo.split('0000')[1]
#        else:
#            cod = codigo
#        try:
#            factura = Factura.objects.get(pk=cod)
#            return factura
#        except Factura.DoesNotExist:
#            factura = Factura.objects.create(codigo=cod, fecha=self.cleaned_data['fecha'], usuario=usuario)
#            return factura
#
################################################################################
class AddProductosInventarioForm(forms.Form):
    
    producto = forms.CharField(widget=forms.TextInput(attrs=prod_dict), help_text='Escriba el nombre del producto o las iniciales, se desplegara una lista con las coincidecias.')
    cantidad = forms.CharField()
    #factura = forms.CharField(widget=forms.HiddenInput())
    fecha = forms.DateField(widget=forms.TextInput(attrs=date_dict))   
    
    def factura_init_val(self, factura_id):
        self.fields['factura'].initial = factura_id
        
    def save(self, usuario):
        fecha = self.cleaned_data['fecha']
        producto_ref = self.cleaned_data['producto']
        producto = Producto.objects.get(referencia__exact=self.cleaned_data['producto'])        
        #factura = Factura.objects.get(pk=self.cleaned_data['factura'])
        precio_producto = PreciosProducto.objects.get_precio_x_fecha(producto_ref, fecha)
        tipo_transaccion = TipoTransaccion.objects.get(pk=1)
        cantidad = self.cleaned_data['cantidad']        
        valor_producto = int(precio_producto) * int(cantidad)
        
        try:
            inventario = Inventario.objects.get(producto__exact=producto, usuario=usuario)
            inventario.existencias += int(cantidad)            
            nuevo_valor = int(inventario.valor) + valor_producto
            inventario.valor = nuevo_valor           
            historial_inventario = HistorialInventario.objects.create(fecha=fecha, inventario=inventario, transaccion=tipo_transaccion, cantidad=cantidad, usuario=usuario)
            inventario.save()
        except Inventario.DoesNotExist:
            inventario = Inventario.objects.create(existencias=cantidad, valor=valor_producto, usuario=usuario, producto=producto)
            historial_inventario = HistorialInventario.objects.create(fecha=fecha, inventario=inventario, transaccion=tipo_transaccion, cantidad=cantidad, usuario=usuario)
################################################################################
class AddProductosInventarioFromFileForm(forms.Form):
    import_file = forms.FileField(widget=forms.FileInput())
    
    def clean_import_file(self):
        import_file = self.cleaned_data.get('import_file')        
        if import_file.content_type == 'application/vnd.ms-excel' or import_file.content_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
            return import_file
        else:
            raise forms.ValidationError(_(u'Debe ser un archivo con extencion xls o xlsx'))    
    
    def upload_file(self, username, file_name, file_content):
        path = Inventario.objects.get_file_path(username)
        file_path = os.path.join(path, file_name)
        new_file = open('%s' %(file_path), 'wb')
        for chunk in file_content.chunks():
            new_file.write(chunk)
        #for chunk in file_name.chunks():
        #    new_file.write(chunk)
        new_file.close() 
################################################################################
class PreviewForm(forms.Form):
    
    def save(self, products_list, usuario):
        
        fecha = date.today()
        
        for product in products_list:
            
            producto = Producto.objects.get(referencia__exact=product[0])
            precio_producto = PreciosProducto.objects.get_precio_x_fecha(product[0], fecha)
            tipo_transaccion = TipoTransaccion.objects.get(pk=1)
            cantidad = product[1]        
            valor_producto = int(precio_producto) * int(cantidad)
        
            try:
                inventario = Inventario.objects.get(producto__exact=producto, usuario=usuario)
                inventario.existencias += int(cantidad)            
                nuevo_valor = int(inventario.valor) + valor_producto
                inventario.valor = nuevo_valor           
                historial_inventario = HistorialInventario.objects.create(fecha=fecha, inventario=inventario, transaccion=tipo_transaccion, cantidad=cantidad, usuario=usuario)
                inventario.save()
            except Inventario.DoesNotExist:
                inventario = Inventario.objects.create(existencias=cantidad, valor=valor_producto, usuario=usuario, producto=producto)
                historial_inventario = HistorialInventario.objects.create(fecha=fecha, inventario=inventario, transaccion=tipo_transaccion, cantidad=cantidad, usuario=usuario)
################################################################################            
        



